// 引入给我们定义好的三个属性，获取token，设置token，删除token
import { getToken, setToken, removeToken } from '@/utils/auth'
// 引入封装的接口
import { login, getInfo, getUserDetailById } from '@/api/user'
import { setTimeStamp } from '@/utils/auth'
// 分开定义三个状态
// state状态
const state = {
  //  设置token刚开始的状态
  token: getToken(),
  userInfo: {} // 定义一个空的对象,把修改后获取的数据放到里面
}
// 修改state
const mutations = {
  // 设置用户信息
  setUsrInfo(state, userInfo) {
    state.userInfo = { ...userInfo }
  },
  // 删除用户信息
  remoUsrInfo(state) {
    state.userInfo = {}
  },
  // 修改state的状态
  setToken(state, token) {
    // 更新token
    state.token = token
    // 加入本地缓存
    setToken(token)
  },
  // 删除缓存，只有一个参数，因为不需要第二个数据
  removeToken(state) {
    // 删除当前的token
    state.token = null
    // 移除当前的缓存
    removeToken()
  }
}
// 处理异步操作
const actions = {
  // 进行网络请求操作
  async login(context, data) {
    // 获取请求到的数据
    const res = await login(data)
    console.log(res)
    // 进行判断，入伙成功调用接口的话，设置token到vuex
    context.commit('setToken', res)
    setTimeStamp() // 将当前最新时间写入缓存
  },
  // 获取用户资料action
  async getUserInfo(context) {
    // 把得到的数据给data
    const data = await getInfo()
    // 下面获取用户头像的数据
    const baseInfo = await getUserDetailById(data.userId)
    // 把两个合并起来
    const baseResult = { ...data, ...baseInfo }
    // 通过调用方法把值传出去
    context.commit('setUsrInfo', baseResult)
    return baseResult
  },
  // 登出退出
  async logout(context) {
    // 删除用户tonken
    context.commit('removeToken')
    // 删除用户资料
    context.commit('remoUsrInfo')
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
